home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume90 / comm / dnet / mailchk5 / part01 next >
Encoding:
Internet Message Format  |  1990-07-03  |  57.3 KB

  1. Path: xanth!cs.odu.edu!Amiga-Request
  2. From: Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v90i192: mailchk 05 - mail client+server for DNet, Part01/03
  5. Message-ID: <13035@xanth.cs.odu.edu>
  6. Date: 3 Jul 90 15:08:48 GMT
  7. Sender: news@cs.odu.edu
  8. Reply-To: <lobster@quiche.cs.mcgill.ca>
  9. Lines: 1753
  10. Approved: tadguy@cs.odu.edu (Tad Guy)
  11. X-Mail-Submissions-To: Amiga@cs.odu.edu
  12. X-Post-Discussions-To: comp.sys.amiga
  13.  
  14. Submitted-by: <lobster@quiche.cs.mcgill.ca>
  15. Posting-number: Volume 90, Issue 192
  16. Archive-name: comm/dnet/mailchk-05/part01
  17.  
  18. [ uuencoded executable enclosed  ...tad ]
  19.  
  20.   Included below is the latest version of mailchk, a mail
  21. server for dnet.  Mailchk now has a mailbox icon on the
  22. workbench, which you must doubleclick to see the contents
  23. of the mailbox.
  24.  
  25. Enjoy!
  26.  
  27. -Stephane
  28.  
  29. #!/bin/sh
  30. # This is a shell archive.  Remove anything before this line, then unpack
  31. # it by saving it into a file and typing "sh file".  To overwrite existing
  32. # files, type "sh file -c".  You can also feed this as standard input via
  33. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  34. # will see the following message at the end:
  35. #        "End of archive 1 (of 3)."
  36. # Contents:  amiga amiga/bin amiga/client amiga/client/Dmakefile
  37. #   amiga/client/mailchk_chip.c amiga/client/mailmenu.h amiga/devs
  38. #   amiga/doc amiga/doc/mailchk.doc amiga/l amiga/server
  39. #   amiga/server/servers.h amiga/version.h unix unix/README.SMAILCHK
  40. #   unix/bin unix/doc unix/doc/smailchk.doc unix/lib unix/lib/Makefile
  41. #   unix/lib/dnetlib.c unix/lib/dnetlib.h unix/server
  42. #   unix/server/Makefile unix/server/servers.h unix/server/smailchk.c
  43. # Wrapped by tadguy@xanth on Tue Jul  3 08:56:44 1990
  44. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  45. if test ! -d 'amiga' ; then
  46.     echo shar: Creating directory \"'amiga'\"
  47.     mkdir 'amiga'
  48. fi
  49. if test ! -d 'amiga/bin' ; then
  50.     echo shar: Creating directory \"'amiga/bin'\"
  51.     mkdir 'amiga/bin'
  52. fi
  53. if test ! -d 'amiga/client' ; then
  54.     echo shar: Creating directory \"'amiga/client'\"
  55.     mkdir 'amiga/client'
  56. fi
  57. if test -f 'amiga/client/Dmakefile' -a "${1}" != "-c" ; then 
  58.   echo shar: Will not clobber existing file \"'amiga/client/Dmakefile'\"
  59. else
  60. echo shar: Extracting \"'amiga/client/Dmakefile'\" \(829 characters\)
  61. sed "s/^X//" >'amiga/client/Dmakefile' <<'END_OF_FILE'
  62. X
  63. X#    DNET CLIENTS
  64. X#
  65. X#  DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
  66. X#
  67. X#   Aztec C Compilation and Makefile
  68. X
  69. XLFLAGS    = +Q
  70. XSYMS    = include:symbols.m
  71. XSYMD    = ram:symbols.m
  72. XCFLAGS    = +L +I$(SYMS)
  73. XBIN    = /bin/
  74. XOBDIR    = tmp:dnet/
  75. XSRCS    = *.c
  76. XOBJS    = $(OBDIR)*.o
  77. X
  78. Xall: $(SYMS) /lib/dnetlib.lib /bin/mailchk
  79. X
  80. XOBJS = mailchk.o mailchk_chip.o
  81. X
  82. X/bin/mailchk : $(OBJS)
  83. X    ln $(LFLAGS) mailchk.o -l/lib/dnetlib -la -lsup32 -lc32 +cd \
  84. X       mailchk_chip.o -o %(left)
  85. X
  86. X
  87. X
  88. Xmailchk.o: mailchk.c
  89. X    cc $(CFLAGS) %(right) -o t:dnet_temp.o
  90. X    copy T:dnet_temp.o %(left)
  91. X    -delete t:dnet_temp.o
  92. X
  93. Xmailchk_chip.o: mailchk_chip.c
  94. X    cc $(CFLAGS) %(right) -o t:dnet_temp.o
  95. X    copy T:dnet_temp.o %(left)
  96. X    -delete t:dnet_temp.o
  97. X
  98. X/lib/dnetlib.lib: /lib/dnetlib.c
  99. X    cd /lib
  100. X    dmake
  101. X    cd /client
  102. X
  103. Xclean:
  104. X    -delete $(OBDIR)#?.o
  105. X
  106. X$(SYMD) : $(SYMS)
  107. X    Copy %(right) %(left)
  108. X
  109. END_OF_FILE
  110. if test 829 -ne `wc -c <'amiga/client/Dmakefile'`; then
  111.     echo shar: \"'amiga/client/Dmakefile'\" unpacked with wrong size!
  112. fi
  113. # end of 'amiga/client/Dmakefile'
  114. fi
  115. if test -f 'amiga/client/mailchk_chip.c' -a "${1}" != "-c" ; then 
  116.   echo shar: Will not clobber existing file \"'amiga/client/mailchk_chip.c'\"
  117. else
  118. echo shar: Extracting \"'amiga/client/mailchk_chip.c'\" \(18977 characters\)
  119. sed "s/^X//" >'amiga/client/mailchk_chip.c' <<'END_OF_FILE'
  120. X/* Busy pointer image */
  121. XUSHORT BusyPointer[48] =
  122. X    {
  123. X    0x0000, 0x0000,
  124. X
  125. X    0x6700, 0xC700,
  126. X    0xCFA0, 0xCFA0,
  127. X    0xBFF0, 0x3FF0,
  128. X    0x70F8, 0x7FF8,
  129. X    0x7DFC, 0x7FFC,
  130. X    0xFBFC, 0xFFFC,
  131. X    0x70FC, 0x7FFC,
  132. X    0x7FFE, 0x7FFE,
  133. X    0x7F0E, 0x7FFE,
  134. X    0x3FDF, 0x3FFF,
  135. X    0x7FBE, 0x7FFE,
  136. X    0x3F0E, 0x3FFE,
  137. X    0x1FFC, 0x1FFC,
  138. X    0x07F8, 0x07F8,
  139. X    0x01E0, 0x01E0,
  140. X    0x0780, 0x0780,
  141. X    0x0FE0, 0x0FE0,
  142. X    0x0740, 0x0740,
  143. X    0x0000, 0x0000,
  144. X    0x0070, 0x0070,
  145. X    0x0078, 0x0078,
  146. X    0x0030, 0x0030,
  147. X
  148. X    0x0000, 0x0000,
  149. X    };
  150. X
  151. X
  152. X
  153. X
  154. XUSHORT MbBitMap[3][48*36] = {
  155. X   {
  156. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  157. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  158. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  159. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  160. X   0x0000, 0x03c0, 0x0000,    /* ......................####...................... */
  161. X   0x0000, 0x3fc0, 0x0000,    /* ..................########...................... */
  162. X   0x0000, 0xffc0, 0x0000,    /* ................##########...................... */
  163. X   0x0000, 0x01c0, 0x0000,    /* .......................###...................... */
  164. X   0x00ff, 0xfdc0, 0x0000,    /* ........##############.###...................... */
  165. X   0x03c0, 0x07c0, 0x0000,    /* ......####...........#####...................... */
  166. X   0x0700, 0x005f, 0x8000,    /* .....###.................#.######............... */
  167. X   0x0700, 0x0040, 0x7f00,    /* .....###.................#.......#######........ */
  168. X   0x0700, 0x0040, 0x80c0,    /* .....###.................#......#.......##...... */
  169. X   0x0700, 0x0043, 0x0020,    /* .....###.................#....##..........#..... */
  170. X   0x0700, 0x0044, 0x0020,    /* .....###.................#...#............#..... */
  171. X   0x0700, 0x0047, 0xc020,    /* .....###.................#...#####........#..... */
  172. X   0x0700, 0x00e7, 0xfe20,    /* .....###................###..##########...#..... */
  173. X   0x0700, 0x0047, 0xe7a0,    /* .....###.................#...######..####.#..... */
  174. X   0x0700, 0x0007, 0xc3e0,    /* .....###.....................#####....#####..... */
  175. X   0x0700, 0x0007, 0xc3e0,    /* .....###.....................#####....#####..... */
  176. X   0x0700, 0x0007, 0xff20,    /* .....###.....................###########..#..... */
  177. X   0x0700, 0x0007, 0xfe20,    /* .....###.....................##########...#..... */
  178. X   0x03e0, 0x0007, 0xfc20,    /* ......#####..................#########....#..... */
  179. X   0x003f, 0x8007, 0xf020,    /* ..........#######............#######......#..... */
  180. X   0x000e, 0xfc07, 0xe7e0,    /* ............###.######.......######..######..... */
  181. X   0x000e, 0x07e7, 0x9e00,    /* ............###......######..####..####......... */
  182. X   0x000e, 0x01ff, 0xf000,    /* ............###........#############............ */
  183. X   0x000e, 0x01c0, 0x0000,    /* ............###........###...................... */
  184. X   0x000e, 0x01c0, 0x0000,    /* ............###........###...................... */
  185. X   0x000e, 0x01c0, 0x0000,    /* ............###........###...................... */
  186. X   0x000e, 0x01c0, 0x0000,    /* ............###........###...................... */
  187. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  188. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  189. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  190. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  191. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  192. X
  193. X   0xffff, 0xffff, 0xffff,    /* ################################################ */
  194. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  195. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  196. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  197. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  198. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  199. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  200. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  201. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  202. X   0xc03f, 0xf800, 0x0001,    /* ##........###########..........................# */
  203. X   0xc0ff, 0xffa0, 0x0001,    /* ##......#################.#....................# */
  204. X   0xc0ff, 0xffbf, 0x8001,    /* ##......#################.#######..............# */
  205. X   0xc0ff, 0xffbf, 0x7f01,    /* ##......#################.######.#######.......# */
  206. X   0xc0ff, 0xffbc, 0xffc1,    /* ##......#################.####..##########.....# */
  207. X   0xc0ff, 0xffbb, 0xffc1,    /* ##......#################.###.############.....# */
  208. X   0xc0ff, 0xffb8, 0x3fc1,    /* ##......#################.###.....########.....# */
  209. X   0xc0ff, 0xff1b, 0xc1c1,    /* ##......################...##.####.....###.....# */
  210. X   0xc0ff, 0xffbb, 0xe041,    /* ##......#################.###.#####......#.....# */
  211. X   0xc0ff, 0xfffb, 0xc381,    /* ##......#####################.####....###......# */
  212. X   0xc0ff, 0xfff9, 0xc301,    /* ##......#####################..###....##.......# */
  213. X   0xc0ff, 0xfffa, 0xfec1,    /* ##......#####################.#.#######.##.....# */
  214. X   0xc0ff, 0xfffb, 0xfdc1,    /* ##......#####################.########.###.....# */
  215. X   0xc01f, 0xfff9, 0xf3c1,    /* ##.........##################..#####..####.....# */
  216. X   0xc000, 0x7ffb, 0xefc1,    /* ##...............############.#####.######.....# */
  217. X   0xc000, 0x03fb, 0x9801,    /* ##....................#######.###..##..........# */
  218. X   0xc000, 0x001b, 0x6001,    /* ##.........................##.##.##............# */
  219. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  220. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  221. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  222. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  223. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  224. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  225. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  226. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  227. X   0xc000, 0x0000, 0x0001,    /* ##.............................................# */
  228. X   0xffff, 0xffff, 0xffff,    /* ################################################ */
  229. X   },
  230. X
  231. X   {
  232. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  233. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  234. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  235. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  236. X   0x0000, 0x0380, 0x0000,    /* ......................###....................... */
  237. X   0x0000, 0x3f80, 0x0000,    /* ..................#######....................... */
  238. X   0x0000, 0xff80, 0x0000,    /* ................#########....................... */
  239. X   0x0000, 0x0180, 0x0000,    /* .......................##....................... */
  240. X   0x00ff, 0xf980, 0x0000,    /* ........#############..##....................... */
  241. X   0x0380, 0x0f80, 0x0000,    /* ......###...........#####....................... */
  242. X   0x0600, 0x00bf, 0x0000,    /* .....##.................#.######................ */
  243. X   0x0600, 0x0080, 0xfe00,    /* .....##.................#.......#######......... */
  244. X   0x0600, 0x0081, 0x0180,    /* .....##.................#......#.......##....... */
  245. X   0x0600, 0x0086, 0x0040,    /* .....##.................#....##..........#...... */
  246. X   0x0600, 0x0088, 0x0040,    /* .....##.................#...#............#...... */
  247. X   0x0600, 0x0088, 0x0240,    /* .....##.................#...#.........#..#...... */
  248. X   0x0600, 0x01c8, 0x0e40,    /* .....##................###..#.......###..#...... */
  249. X   0x0600, 0x0088, 0xfc40,    /* .....##.................#...#...######...#...... */
  250. X   0x0600, 0x0008, 0xf840,    /* .....##.....................#...#####....#...... */
  251. X   0x0600, 0x0008, 0x0040,    /* .....##.....................#............#...... */
  252. X   0x0600, 0x0008, 0x0040,    /* .....##.....................#............#...... */
  253. X   0x0600, 0x0008, 0x0040,    /* .....##.....................#............#...... */
  254. X   0x03c0, 0x0008, 0x0040,    /* ......####..................#............#...... */
  255. X   0x003f, 0x0008, 0x0040,    /* ..........######............#............#...... */
  256. X   0x000c, 0xf808, 0x0fc0,    /* ............##..#####.......#.......######...... */
  257. X   0x000c, 0x07c8, 0x3c00,    /* ............##.......#####..#.....####.......... */
  258. X   0x000c, 0x01ff, 0xe000,    /* ............##.........############............. */
  259. X   0x000c, 0x0180, 0x0000,    /* ............##.........##....................... */
  260. X   0x000c, 0x0180, 0x0000,    /* ............##.........##....................... */
  261. X   0x000c, 0x0180, 0x0000,    /* ............##.........##....................... */
  262. X   0x000c, 0x0180, 0x0000,    /* ............##.........##....................... */
  263. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  264. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  265. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  266. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  267. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  268. X
  269. X   0xffff, 0xffff, 0xffff,    /* ################################################ */
  270. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  271. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  272. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  273. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  274. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  275. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  276. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  277. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  278. X   0x807f, 0xf000, 0x0001,    /* #........###########...........................# */
  279. X   0x81ff, 0xff40, 0x0001,    /* #......#################.#.....................# */
  280. X   0x81ff, 0xff7f, 0x0001,    /* #......#################.#######...............# */
  281. X   0x81ff, 0xff7e, 0xfe01,    /* #......#################.######.#######........# */
  282. X   0x81ff, 0xff79, 0xff81,    /* #......#################.####..##########......# */
  283. X   0x81ff, 0xff77, 0xff81,    /* #......#################.###.############......# */
  284. X   0x81ff, 0xff77, 0xff81,    /* #......#################.###.############......# */
  285. X   0x81ff, 0xfe37, 0xff81,    /* #......################...##.############......# */
  286. X   0x81ff, 0xff77, 0xff81,    /* #......#################.###.############......# */
  287. X   0x81ff, 0xfff7, 0xff81,    /* #......#####################.############......# */
  288. X   0x81ff, 0xfff7, 0xff81,    /* #......#####################.############......# */
  289. X   0x81ff, 0xfff7, 0xff81,    /* #......#####################.############......# */
  290. X   0x81ff, 0xfff7, 0xff81,    /* #......#####################.############......# */
  291. X   0x803f, 0xfff7, 0xff81,    /* #.........##################.############......# */
  292. X   0x8000, 0xfff7, 0xff81,    /* #...............############.############......# */
  293. X   0x8000, 0x07f7, 0xf001,    /* #....................#######.#######...........# */
  294. X   0x8000, 0x0037, 0xc001,    /* #.........................##.#####.............# */
  295. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  296. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  297. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  298. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  299. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  300. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  301. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  302. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  303. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  304. X   0xffff, 0xffff, 0xffff,    /* ################################################ */
  305. X   },
  306. X
  307. X   {
  308. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  309. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  310. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  311. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  312. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  313. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  314. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  315. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  316. X   0x00ff, 0xf800, 0x0000,    /* ........#############........................... */
  317. X   0x0380, 0x0f80, 0x0000,    /* ......###...........#####....................... */
  318. X   0x0600, 0x007f, 0x0000,    /* .....##..................#######................ */
  319. X   0x0600, 0x0000, 0xfe00,    /* .....##.........................#######......... */
  320. X   0x0600, 0x0001, 0x0180,    /* .....##........................#.......##....... */
  321. X   0x0600, 0x0006, 0x0040,    /* .....##......................##..........#...... */
  322. X   0x0600, 0x0008, 0x0040,    /* .....##.....................#............#...... */
  323. X   0x0600, 0x0088, 0x0240,    /* .....##.................#...#.........#..#...... */
  324. X   0x0607, 0xffc8, 0x0e40,    /* .....##......#############..#.......###..#...... */
  325. X   0x0607, 0x8088, 0xfc40,    /* .....##......####.......#...#...######...#...... */
  326. X   0x0603, 0x0008, 0xf840,    /* .....##.......##............#...#####....#...... */
  327. X   0x0603, 0x0008, 0x0040,    /* .....##.......##............#............#...... */
  328. X   0x0601, 0x0008, 0x0040,    /* .....##........#............#............#...... */
  329. X   0x0600, 0x0008, 0x0040,    /* .....##.....................#............#...... */
  330. X   0x03c0, 0x0008, 0x0040,    /* ......####..................#............#...... */
  331. X   0x003f, 0x0008, 0x0040,    /* ..........######............#............#...... */
  332. X   0x000c, 0xf808, 0x0fc0,    /* ............##..#####.......#.......######...... */
  333. X   0x000c, 0x07c8, 0x3c00,    /* ............##.......#####..#.....####.......... */
  334. X   0x000c, 0x01ff, 0xe000,    /* ............##.........############............. */
  335. X   0x000c, 0x0180, 0x0000,    /* ............##.........##....................... */
  336. X   0x000c, 0x0180, 0x0000,    /* ............##.........##....................... */
  337. X   0x000c, 0x0180, 0x0000,    /* ............##.........##....................... */
  338. X   0x000c, 0x0180, 0x0000,    /* ............##.........##....................... */
  339. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  340. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  341. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  342. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  343. X   0x0000, 0x0000, 0x0000,    /* ................................................ */
  344. X
  345. X   0xffff, 0xffff, 0xffff,    /* ################################################ */
  346. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  347. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  348. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  349. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  350. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  351. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  352. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  353. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  354. X   0x807f, 0xf000, 0x0001,    /* #........###########...........................# */
  355. X   0x81ff, 0xff80, 0x0001,    /* #......##################......................# */
  356. X   0x81ff, 0xffff, 0x0001,    /* #......#########################...............# */
  357. X   0x81ff, 0xfffe, 0xfe01,    /* #......########################.#######........# */
  358. X   0x81ff, 0xfff9, 0xff81,    /* #......######################..##########......# */
  359. X   0x81ff, 0xfff7, 0xff81,    /* #......#####################.############......# */
  360. X   0x81ff, 0xff77, 0xff81,    /* #......#################.###.############......# */
  361. X   0x81f8, 0x0037, 0xff81,    /* #......######.............##.############......# */
  362. X   0x81f8, 0x7f77, 0xff81,    /* #......######....#######.###.############......# */
  363. X   0x81fc, 0xfff7, 0xff81,    /* #......#######..############.############......# */
  364. X   0x81fc, 0xfff7, 0xff81,    /* #......#######..############.############......# */
  365. X   0x81fe, 0xfff7, 0xff81,    /* #......########.############.############......# */
  366. X   0x81ff, 0xfff7, 0xff81,    /* #......#####################.############......# */
  367. X   0x803f, 0xfff7, 0xff81,    /* #.........##################.############......# */
  368. X   0x8000, 0xfff7, 0xff81,    /* #...............############.############......# */
  369. X   0x8000, 0x07f7, 0xf001,    /* #....................#######.#######...........# */
  370. X   0x8000, 0x0037, 0xc001,    /* #.........................##.#####.............# */
  371. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  372. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  373. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  374. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  375. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  376. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  377. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  378. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  379. X   0x8000, 0x0000, 0x0001,    /* #..............................................# */
  380. X   0xffff, 0xffff, 0xffff,    /* ################################################ */
  381. X   }
  382. X};
  383. X
  384. Xstruct Image MbImage = { 0,0, 48,36, 2, &MbBitMap[2][0], 0x3,0x0, NULL };
  385. X
  386. END_OF_FILE
  387. if test 18977 -ne `wc -c <'amiga/client/mailchk_chip.c'`; then
  388.     echo shar: \"'amiga/client/mailchk_chip.c'\" unpacked with wrong size!
  389. fi
  390. # end of 'amiga/client/mailchk_chip.c'
  391. fi
  392. if test -f 'amiga/client/mailmenu.h' -a "${1}" != "-c" ; then 
  393.   echo shar: Will not clobber existing file \"'amiga/client/mailmenu.h'\"
  394. else
  395. echo shar: Extracting \"'amiga/client/mailmenu.h'\" \(1780 characters\)
  396. sed "s/^X//" >'amiga/client/mailmenu.h' <<'END_OF_FILE'
  397. X/*  mailmenu.h
  398. X *
  399. X *  Menu definitions for mailchk.c
  400. X */
  401. X
  402. X
  403. XITEXT IText1[] = {
  404. X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, (ubyte *)"Talk"  },
  405. X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, (ubyte *)"Window"},
  406. X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Remove"         }
  407. X};
  408. X
  409. XITEXT IText2[] = {
  410. X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"View"           },
  411. X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Print"          },
  412. X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Delete"         },
  413. X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Save"           },
  414. X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Speak"          },
  415. X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Reply"          },
  416. X};
  417. X
  418. X
  419. XITEM Item1[] = {
  420. X    { &Item1[1], 0, 0, 100, 10, ITEMTEXT|MENUTOGGLE|CHECKIT|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText1[0], NULL },
  421. X    { &Item1[2], 0,10, 100, 10, ITEMTEXT|MENUTOGGLE|CHECKIT|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText1[1], NULL },
  422. X    { NULL     , 0,20, 100, 10, ITEMTEXT|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText1[2], NULL }
  423. X};
  424. X
  425. XITEM Item2[] = {
  426. X    { &Item2[1], 0, 0, 100, 10, ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText2[0], NULL, 'V' },
  427. X    { &Item2[2], 0,10, 100, 10, ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText2[1], NULL, 'P' },
  428. X    { &Item2[3], 0,20, 100, 10, ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText2[2], NULL, 'D' },
  429. X    { &Item2[4], 0,30, 100, 10, ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText2[3], NULL, 'S' },
  430. X    { &Item2[5], 0,40, 100, 10, ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText2[4], NULL, 'T' },
  431. X    { NULL     , 0,50, 100, 10, ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText2[5], NULL, 'R'},
  432. X};
  433. X
  434. XMENU Menu[] = {
  435. X    { &Menu[1], 0, 0, 100, 10+20, MENUENABLED, "Project", &Item1[0] },
  436. X    { NULL    , 110, 0, 100, 10+50, MENUENABLED, "Mail", &Item2[0] }
  437. X};
  438. X
  439. END_OF_FILE
  440. if test 1780 -ne `wc -c <'amiga/client/mailmenu.h'`; then
  441.     echo shar: \"'amiga/client/mailmenu.h'\" unpacked with wrong size!
  442. fi
  443. # end of 'amiga/client/mailmenu.h'
  444. fi
  445. if test ! -d 'amiga/devs' ; then
  446.     echo shar: Creating directory \"'amiga/devs'\"
  447.     mkdir 'amiga/devs'
  448. fi
  449. if test ! -d 'amiga/doc' ; then
  450.     echo shar: Creating directory \"'amiga/doc'\"
  451.     mkdir 'amiga/doc'
  452. fi
  453. if test -f 'amiga/doc/mailchk.doc' -a "${1}" != "-c" ; then 
  454.   echo shar: Will not clobber existing file \"'amiga/doc/mailchk.doc'\"
  455. else
  456. echo shar: Extracting \"'amiga/doc/mailchk.doc'\" \(5543 characters\)
  457. sed "s/^X//" >'amiga/doc/mailchk.doc' <<'END_OF_FILE'
  458. XAMIGA/MAILCHK
  459. X
  460. X    MAILCHK [-Nnet] [-tupdatetime] [-h] [-s#] [-w#] [-q]
  461. X
  462. X    The -N option specifies the network (default = 0).  This is the same
  463. X    network as was specified when you ran DNET (if was not specified, is 0)
  464. X
  465. X    The -t option specifies the time between checks [DEFAULT = 40s].
  466. X    The -h option displays a help message.
  467. X    The -s option selects speech:
  468. X           -s0 = Do not speak.
  469. X           -s1 = Say things like "You have mail"... [DEFAULT]
  470. X    The -w option selects nowindow/window:
  471. X           -w0 = Do not open a window when mail is received.
  472. X           -w1 = Open a window to display mailbox.  [DEFAULT]
  473. X    The -q option removes the client.  It has no effect if MailChk was
  474. X                  not already running. 
  475. X
  476. X
  477. X    With MAILCHK, you may view letters using you favorite text viewer. 
  478. XThis viewer must be able to read from the DPIPE: device.  I know that TY
  479. Xand MUCHMORE work as expected.  LessV1.3 DOES NOT WORK with the DPIPE:
  480. X(or the PIPE:) device.  The default viewer is SYS:UTILITIES/More.  To
  481. Xchange it, use SETENV PAGER "path/your viewer".  The DPIPE: device must be
  482. Xmounted for this option to work.
  483. X
  484. X    When you first run the program, an icon representing a mailbox
  485. Xwill appear on your workbench screen.  The position of the icon on
  486. Xthe screen can be set with Matt Dillon's config utility.  I think
  487. Xthat the various mailbox images are intuitive enough so I won't
  488. Xdescribe them.  To view the contents of the mailbox, double click on
  489. Xthe icon.
  490. X
  491. XNOTE:  You need ARP.LIBRARY V39.1 to run this program.
  492. X------------------------------------------------------ 
  493. X
  494. XDescription of the switches:
  495. X============================
  496. X
  497. X    The server process on the Unix end must check periodically for new
  498. Xmail.  The -t switch sets the frequency of those checks.  If speech is
  499. Xselected (-s1), the program will use the SPEAK: device to say "You have
  500. Xmail" or "New mail has arrived".  If the -w0 switch is selected, then
  501. Xno window will be opened when mail arrives. In the case of -s0 -w0 being
  502. Xselected, what would have appeared in a window is redirected to the
  503. Xstandard output.
  504. X    The -q switch removes Mailchk.  All the above settings can be
  505. Xmodified at any time by calling the program with the desired switches.
  506. XEg.
  507. X        run mailchk -s0 -t15       ; do not speak, frequency 15 seconds
  508. X        mailchk -s1 -w0            ; speak, but do not open a window
  509. X        mailchk -q                 ; done with the mail client...
  510. X
  511. XDescription of the menus:
  512. X=========================
  513. X
  514. X    There are two menus, Project and Mail, which are available from
  515. Xboth the icon window and the display window (when opened).
  516. X
  517. XProject:
  518. X          
  519. X   Talk   :  Toggle that have the same function as the -s switch
  520. X
  521. X   Window :  Toggle that have the same function as the -w switch
  522. X
  523. X   Remove :  Same effect as typing "mailchk -q" in a CLI.  The client is
  524. X             removed (killed).
  525. X
  526. XMail:
  527. X
  528. X   View   :  View a message previously selected with the mouse.  The
  529. X             text viewer used is More.  If you prefer another viewer,
  530. X             then setenv PAGER to the name of the viewer.
  531. X             Eg. setenv PAGER 'MuchMore'
  532. X             Note:  LessV1.3 does not work with the DPIPE: device, which
  533. X                    just reminded me that the DPIPE: device must be
  534. X                    mounted for this option to work.
  535. X
  536. X   Print  :  Output the selected letter to the PRT: device.
  537. X  
  538. X   Delete :  Remove the selected message from your Unix mailbox.
  539. X             Look in the DNET.LOG file for any errors...
  540. X
  541. X   Save   :  Save the selected message.  This option uses the ARP
  542. X             file requester.
  543. X
  544. X   Speak  :  Send the selected message to the SPEAK:, which must be
  545. X             mounted.  Only the actual message is sent (No use in
  546. X             hearing a bunch of numbers or some unpronouncable
  547. X             addresses, don't you think?).
  548. X             If the environnement variable SPEAKER is set, its value 
  549. X             is taken as the name of the device.
  550. X             Eg. setenv SPEAKER 'SPEAK:opt/f'
  551. X
  552. X   Reply  :  Replies to the selected message using your favorite editor.
  553. X             The program will use 'ed' unless you specified another
  554. X             editor in the environnement variable EDITOR.  
  555. X             You may cancel the operation by quitting the editor without
  556. X             saving.  If for any reasons the reply could not be sent,
  557. X             your letter will be saved in the T: directory under the
  558. X             name "dead.letter".
  559. X
  560. X
  561. XBUGS
  562. X
  563. X    The DPIPE: device seems to choke on big transfers. 
  564. Xavoid reading files that contain a uuencoded program...
  565. XIf the PIPE: device was working with ARP, it would also have simplified
  566. Xthings a bit.
  567. X
  568. X    Also the Reply function does not work reliably.  When you see
  569. X"Transmission error" on the window title bar, it is an indication
  570. Xsomething went wrong.  Just to be sure, I always save the letter I'm
  571. Xcurrently editing in a different file.
  572. X
  573. XDISCLAIMER
  574. X
  575. X    I offer no guarantee that this program will work as advertised.
  576. XThis program is subject to the same distributions conditions specified 
  577. Xin the Dnet documentation.    
  578. X
  579. XNOTE FROM THE PROGRAMMER
  580. X
  581. X    I will continue to improve MailChk.  For this reason, any
  582. Xsuggestions or improvements should be sent to me to ensure that only one
  583. X'official' version exists and that it is the best one.
  584. X
  585. X    Things to look for in future versions:
  586. X       ...A send option. 
  587. X       ...A better narrator.device!?!...
  588. X
  589. X
  590. XStephane Laroche
  591. XApril 25, 1990
  592. X
  593. XBITNET:  B85O@MUSICB.MCGILL.BITNET
  594. X
  595. XBefore (september 1990):  lobster@calvin.cs.mcgill.ca
  596. X    
  597. END_OF_FILE
  598. if test 5543 -ne `wc -c <'amiga/doc/mailchk.doc'`; then
  599.     echo shar: \"'amiga/doc/mailchk.doc'\" unpacked with wrong size!
  600. fi
  601. # end of 'amiga/doc/mailchk.doc'
  602. fi
  603. if test ! -d 'amiga/l' ; then
  604.     echo shar: Creating directory \"'amiga/l'\"
  605.     mkdir 'amiga/l'
  606. fi
  607. if test ! -d 'amiga/server' ; then
  608.     echo shar: Creating directory \"'amiga/server'\"
  609.     mkdir 'amiga/server'
  610. fi
  611. if test -f 'amiga/server/servers.h' -a "${1}" != "-c" ; then 
  612.   echo shar: Will not clobber existing file \"'amiga/server/servers.h'\"
  613. else
  614. echo shar: Extracting \"'amiga/server/servers.h'\" \(643 characters\)
  615. sed "s/^X//" >'amiga/server/servers.h' <<'END_OF_FILE'
  616. X
  617. X/*
  618. X *  SERVERS.H
  619. X *
  620. X *  DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
  621. X *
  622. X */
  623. X
  624. X#include "/version.h"
  625. X
  626. X#define PORT_FILECOPY    8192
  627. X#define PORT_ALPHATERM    8193
  628. X#define PORT_ECHO    8194
  629. X#define PORT_IALPHATERM 8195
  630. X#define PORT_AMIGASHELL 8196
  631. X#define PORT_LOADAV    8197
  632. X#define PORT_PRINTER    8198
  633. X#define PORT_PASSWD    8199
  634. X#define PORT_BBS    8200
  635. X#define PORT_GFILECOPY    8201
  636. X#define PORT_MAILCHK    8204
  637. X
  638. X#define DNET_WRITE  "DNET_WRITE"
  639. X#define DNET_READ   "DNET_READ"
  640. X#define DNET_LEVEL  "DNET_LEVEL"
  641. X#define DNET_GROUP  "DNET_GROUP"
  642. X
  643. X#define FS_GROUP    "GR="   /*  MUST INCLUDE '=' cause I use strncmp()  */
  644. X#define FS_ACCESS   "AC="
  645. X
  646. END_OF_FILE
  647. if test 643 -ne `wc -c <'amiga/server/servers.h'`; then
  648.     echo shar: \"'amiga/server/servers.h'\" unpacked with wrong size!
  649. fi
  650. # end of 'amiga/server/servers.h'
  651. fi
  652. if test -f 'amiga/version.h' -a "${1}" != "-c" ; then 
  653.   echo shar: Will not clobber existing file \"'amiga/version.h'\"
  654. else
  655. echo shar: Extracting \"'amiga/version.h'\" \(527 characters\)
  656. sed "s/^X//" >'amiga/version.h' <<'END_OF_FILE'
  657. X
  658. X#define VERSION         "2.01"
  659. X
  660. X#define DNET_VERSION        ".10"
  661. X#define STATDNET_VERSION    ".04"
  662. X#define PUTFILES_VERSION    ".03"
  663. X#define LOADAV_VERSION        ".05"
  664. X#define FTERM_VERSION        ".04"
  665. X#define QUITDNET_VERSION    ".01"
  666. X#define GETFILES_VERSION    ".02"
  667. X#define CLITERM_VERSION     ".01"
  668. X#define MAILCHK_VERSION     ".05"
  669. X
  670. X#define SPRINT_VERSION        ".01"
  671. X#define SGCOPY_VERSION        ".01"
  672. X#define SCOPY_VERSION        ".03"
  673. X#define STERM_VERSION        ".03"
  674. X#define SCLI_VERSION        ".02"
  675. X#define SPASSWD_VERSION     ".01"
  676. X
  677. END_OF_FILE
  678. if test 527 -ne `wc -c <'amiga/version.h'`; then
  679.     echo shar: \"'amiga/version.h'\" unpacked with wrong size!
  680. fi
  681. # end of 'amiga/version.h'
  682. fi
  683. if test ! -d 'unix' ; then
  684.     echo shar: Creating directory \"'unix'\"
  685.     mkdir 'unix'
  686. fi
  687. if test -f 'unix/README.SMAILCHK' -a "${1}" != "-c" ; then 
  688.   echo shar: Will not clobber existing file \"'unix/README.SMAILCHK'\"
  689. else
  690. echo shar: Extracting \"'unix/README.SMAILCHK'\" \(143 characters\)
  691. sed "s/^X//" >'unix/README.SMAILCHK' <<'END_OF_FILE'
  692. X
  693. XThe version of dnetlib.c is 2.10.  If you are using a different version,
  694. Xit might be wise to place the correct version of dnetlib.c in lib/ .
  695. END_OF_FILE
  696. if test 143 -ne `wc -c <'unix/README.SMAILCHK'`; then
  697.     echo shar: \"'unix/README.SMAILCHK'\" unpacked with wrong size!
  698. fi
  699. # end of 'unix/README.SMAILCHK'
  700. fi
  701. if test ! -d 'unix/bin' ; then
  702.     echo shar: Creating directory \"'unix/bin'\"
  703.     mkdir 'unix/bin'
  704. fi
  705. if test ! -d 'unix/doc' ; then
  706.     echo shar: Creating directory \"'unix/doc'\"
  707.     mkdir 'unix/doc'
  708. fi
  709. if test -f 'unix/doc/smailchk.doc' -a "${1}" != "-c" ; then 
  710.   echo shar: Will not clobber existing file \"'unix/doc/smailchk.doc'\"
  711. else
  712. echo shar: Extracting \"'unix/doc/smailchk.doc'\" \(784 characters\)
  713. sed "s/^X//" >'unix/doc/smailchk.doc' <<'END_OF_FILE'
  714. X
  715. X
  716. XUNIX/SMAILCHK
  717. X
  718. X
  719. X
  720. X    (Port number 8204: MAILCHK client)
  721. X
  722. X        This server handles only one connection.  You must add an entry in
  723. Xyour 'dnet.servers' file for this server.
  724. X
  725. X      Eg:  8204  /u/home/loginname  /u/home/loginname/dnetbin/smailchk
  726. X
  727. X
  728. X    This server expects to find your mailbox in the /usr/spool/mail
  729. Xdirectory.  If, on your system, your mailbox is located in a different
  730. Xplace, then store the path in the environment variable MAIL.
  731. X
  732. X      Eg.  setenv MAIL /var/spool/mail
  733. X
  734. X    There must a unix "mail" program in your path if you want to use
  735. Xthe Reply option from the Amiga.
  736. X
  737. X    To compile the program, type 'make' in the dnet/unix/server
  738. Xdirectory. 
  739. X
  740. X
  741. X
  742. XStephane Laroche
  743. XMarch 19, 1990
  744. X
  745. XINTERNET:  B85O@MUSICB.MCGILL.CA
  746. X
  747. XBefore (september 1990):  lobster@calvin.cs.mcgill.ca
  748. END_OF_FILE
  749. if test 784 -ne `wc -c <'unix/doc/smailchk.doc'`; then
  750.     echo shar: \"'unix/doc/smailchk.doc'\" unpacked with wrong size!
  751. fi
  752. # end of 'unix/doc/smailchk.doc'
  753. fi
  754. if test ! -d 'unix/lib' ; then
  755.     echo shar: Creating directory \"'unix/lib'\"
  756.     mkdir 'unix/lib'
  757. fi
  758. if test -f 'unix/lib/Makefile' -a "${1}" != "-c" ; then 
  759.   echo shar: Will not clobber existing file \"'unix/lib/Makefile'\"
  760. else
  761. echo shar: Extracting \"'unix/lib/Makefile'\" \(42 characters\)
  762. sed "s/^X//" >'unix/lib/Makefile' <<'END_OF_FILE'
  763. X
  764. X
  765. Xdnetlib.o : dnetlib.c
  766. X    cc -c dnetlib.c
  767. X
  768. END_OF_FILE
  769. if test 42 -ne `wc -c <'unix/lib/Makefile'`; then
  770.     echo shar: \"'unix/lib/Makefile'\" unpacked with wrong size!
  771. fi
  772. # end of 'unix/lib/Makefile'
  773. fi
  774. if test -f 'unix/lib/dnetlib.c' -a "${1}" != "-c" ; then 
  775.   echo shar: Will not clobber existing file \"'unix/lib/dnetlib.c'\"
  776. else
  777. echo shar: Extracting \"'unix/lib/dnetlib.c'\" \(6103 characters\)
  778. sed "s/^X//" >'unix/lib/dnetlib.c' <<'END_OF_FILE'
  779. X
  780. X/*
  781. X *  DNETLIB.C
  782. X *
  783. X *    DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved
  784. X *
  785. X *  Library Interface for DNET.
  786. X */
  787. X
  788. X#include <sys/types.h>
  789. X#include <sys/socket.h>
  790. X#include <fcntl.h>
  791. X#include <signal.h>
  792. X#include <stdio.h>
  793. X#include <errno.h>
  794. X#ifdef O_CREAT
  795. X#include <sys/file.h>
  796. X#endif
  797. X#include "../lib/dnetlib.h"
  798. X
  799. Xextern char *getenv();
  800. X
  801. Xtypedef unsigned short uword;
  802. Xtypedef unsigned long ulong;
  803. Xtypedef unsigned char ubyte;
  804. Xtypedef struct sockaddr SOCKADDR;
  805. X
  806. Xtypedef struct {
  807. X    int s;
  808. X    uword port;
  809. X} CHANN;
  810. X
  811. X#define NAMELEN sizeof(".PORT.XXXXX")
  812. X#define NAMEPAT "%s.PORT.%ld"
  813. X
  814. Xchar *getdirpart();
  815. X
  816. XCHANN *
  817. XDListen(port)
  818. Xuword port;
  819. X{
  820. X    CHANN *chan;
  821. X    int s;
  822. X    SOCKADDR *sa = (SOCKADDR *)malloc(sizeof(SOCKADDR)+256);
  823. X    char *dirstr = getenv("DNETDIR") ? getenv("DNETDIR") : "";
  824. X
  825. X    sprintf(sa->sa_data, NAMEPAT, dirstr, port);
  826. X    sa->sa_family = AF_UNIX;
  827. X    unlink(sa->sa_data);
  828. X
  829. X    s = socket(PF_UNIX, SOCK_STREAM, 0);
  830. X    fcntl(s, F_SETOWN, getpid());
  831. X    if (bind(s, sa, sizeof(*sa)-sizeof(sa->sa_data)+strlen(sa->sa_data)) < 0) {
  832. X    close(s);
  833. X    free(sa);
  834. X    return(NULL);
  835. X    }
  836. X    if (listen(s, 5) < 0) {
  837. X    close(s);
  838. X    unlink(sa->sa_data);
  839. X    free(sa);
  840. X    return(NULL);
  841. X    }
  842. X    chan = (CHANN *)malloc(sizeof(CHANN));
  843. X    chan->s = s;
  844. X    chan->port = port;
  845. X    free(sa);
  846. X    return(chan);
  847. X}
  848. X
  849. X
  850. XDUnListen(chan)
  851. XCHANN *chan;
  852. X{
  853. X    char *dirstr = getenv("DNETDIR") ? getenv("DNETDIR") : "";
  854. X    char buf[32];
  855. X
  856. X    close(chan->s);
  857. X    sprintf(buf, NAMEPAT, dirstr, chan->port);
  858. X    unlink(buf);
  859. X    free(chan);
  860. X}
  861. X
  862. XDAccept(chan)
  863. XCHANN *chan;
  864. X{
  865. X    SOCKADDR sa;
  866. X    int addrlen = sizeof(sa);
  867. X    int fd;
  868. X
  869. X    fd = accept(chan->s, &sa, &addrlen);
  870. X    return(fd);
  871. X}
  872. X
  873. XDOpen(host, port, txpri, rxpri)
  874. Xchar *host;
  875. Xuword port;
  876. Xchar txpri, rxpri;
  877. X{
  878. X    int s;
  879. X    char rc;
  880. X    short xb[3];
  881. X    SOCKADDR *sa = (SOCKADDR *)malloc(sizeof(SOCKADDR)+256);
  882. X    char *dirstr = getenv("DNETDIR") ? getenv("DNETDIR") : "";
  883. X
  884. X    if (rxpri < -127)
  885. X    rxpri = -127;
  886. X    if (rxpri > 126)
  887. X    rxpri = 126;
  888. X    if (txpri < -127)
  889. X    txpri = -127;
  890. X    if (txpri > 126)
  891. X    txpri = 126;
  892. X
  893. X    if (host == NULL)
  894. X    host = (getenv("DNETHOST")) ? getenv("DNETHOST"):"3";
  895. X
  896. X    sa->sa_family = AF_UNIX;
  897. X    sprintf(sa->sa_data, "%s%s%s", dirstr, "DNET.", host);
  898. X
  899. X    s = socket(PF_UNIX, SOCK_STREAM, 0);
  900. X    fcntl(s, F_SETOWN, getpid());
  901. X    if (connect(s, sa, sizeof(sa->sa_family) + strlen(sa->sa_data)) < 0) {
  902. X    close(s);
  903. X    free(sa);
  904. X    return(-1);
  905. X    }
  906. X    free(sa);
  907. X    xb[0] = port;
  908. X    ((char *)&xb[1])[0] = txpri;
  909. X    ((char *)&xb[1])[1] = rxpri;
  910. X    write(s, xb, 4);
  911. X    if (read(s, &rc, 1) == 1 && rc == 0)
  912. X    return(s);
  913. X    close(s);
  914. X    return(-1);
  915. X}
  916. X
  917. XDEof(fd)
  918. X{
  919. X    char dummy;
  920. X
  921. X    shutdown(fd, 1);
  922. X    write(fd, &dummy, 0);
  923. X}
  924. X
  925. Xgwrite(fd, buf, bytes)
  926. Xchar *buf;
  927. X{
  928. X    int n;
  929. X    int orig = bytes;
  930. X    extern int errno;
  931. X    while (bytes) {
  932. X    n = write(fd, buf, bytes);
  933. X    if (n > 0) {
  934. X        bytes -= n;
  935. X        buf += n;
  936. X        continue;
  937. X    }
  938. X    if (n < 0) {
  939. X        if (errno == EINTR)
  940. X        continue;
  941. X        if (errno == EWOULDBLOCK) {
  942. X        int wm = 1 << fd;
  943. X        int em = 1 << fd;
  944. X        if (select(fd+1, NULL, &wm, &em, NULL) < 0)
  945. X            continue;
  946. X        if (wm)
  947. X            continue;
  948. X        }
  949. X        return(orig - bytes);
  950. X    }
  951. X    }
  952. X    return(orig);
  953. X}
  954. X
  955. Xgread(fd, buf, bytes)
  956. Xchar *buf;
  957. X{
  958. X    int n;
  959. X    int orig = bytes;
  960. X    extern int errno;
  961. X    while (bytes) {
  962. X    n = read(fd, buf, bytes);
  963. X    if (n > 0) {
  964. X        bytes -= n;
  965. X        buf += n;
  966. X        break;
  967. X    }
  968. X    if (n < 0) {
  969. X        if (errno == EINTR)
  970. X        continue;
  971. X        if (errno == EWOULDBLOCK) {
  972. X        int rm = 1 << fd;
  973. X        int em = 1 << fd;
  974. X        if (select(fd+1, &rm, NULL, &em, NULL) < 0)
  975. X            continue;
  976. X        if (rm)
  977. X            continue;
  978. X        }
  979. X        return(orig - bytes);
  980. X    }
  981. X    if (n == 0)
  982. X        break;
  983. X    }
  984. X    return(orig - bytes);
  985. X}
  986. X
  987. Xggread(fd, buf, bytes)
  988. Xchar *buf;
  989. X{
  990. X    int n;
  991. X    int ttl = 0;
  992. X    while (bytes) {
  993. X    n = gread(fd, buf, bytes);
  994. X    if (n > 0) {
  995. X        bytes -= n;
  996. X        buf += n;
  997. X        ttl += n;
  998. X        continue;
  999. X    }
  1000. X    return(-1);
  1001. X    }
  1002. X    return(ttl);
  1003. X}
  1004. X
  1005. X/*
  1006. X *    Convert to and from 68000 longword format.  Of course, it really
  1007. X *    doesn't matter what format you use, just as long as it is defined.
  1008. X */
  1009. X
  1010. Xntohl68(n)
  1011. Xulong n;
  1012. X{
  1013. X    return(
  1014. X    (((ubyte *)&n)[0] << 24)|
  1015. X    (((ubyte *)&n)[1] << 16)|
  1016. X    (((ubyte *)&n)[2] << 8)|
  1017. X    (((ubyte *)&n)[3])
  1018. X    );
  1019. X}
  1020. X
  1021. Xhtonl68(n)
  1022. Xulong n;
  1023. X{
  1024. X    ulong v;
  1025. X    ((ubyte *)&v)[0] = n >> 24;
  1026. X    ((ubyte *)&v)[1] = n >> 16;
  1027. X    ((ubyte *)&v)[2] = n >> 8;
  1028. X    ((ubyte *)&v)[3] = n;
  1029. X    return(v);
  1030. X}
  1031. X
  1032. X
  1033. XDoOption(ac, av, ops, args)
  1034. Xshort ac;
  1035. Xchar *av[];
  1036. Xchar *ops;
  1037. Xlong args;
  1038. X{
  1039. X    register short i;
  1040. X    short j;
  1041. X
  1042. X    for (i = j = 1; i < ac; ++i) {
  1043. X    register char *ptr = av[i];
  1044. X    if (*ptr != '-') {
  1045. X        av[j++] = av[i];
  1046. X        continue;
  1047. X    }
  1048. X    while (*++ptr) {
  1049. X        register char *op;
  1050. X        long **ap = (long **)&args;
  1051. X        short isshort;
  1052. X
  1053. X        for (op = ops; *op && *op != *ptr;) {
  1054. X        if (*op == *ptr)
  1055. X            break;
  1056. X        if (*++op == '%') {
  1057. X            while (*op && *op != 's' && *op != 'd')
  1058. X            ++op;
  1059. X            if (*op)
  1060. X            ++op;
  1061. X        }
  1062. X        if (*op == ',')     /*  optional ,  */
  1063. X            ++op;
  1064. X        ++ap;
  1065. X        }
  1066. X        if (*op == 0)
  1067. X        return(-1);
  1068. X        if (op[1] != '%') {
  1069. X        *(short *)*ap = 1;
  1070. X        ++ap;
  1071. X        continue;
  1072. X        }
  1073. X        op += 2;
  1074. X        isshort = 1;
  1075. X        while (*op && *op != 's' && *op != 'd') {
  1076. X        switch(*op) {
  1077. X        case 'h':
  1078. X            isshort = 1;
  1079. X            break;
  1080. X        case 'l':
  1081. X            isshort = 0;
  1082. X            break;
  1083. X        default:
  1084. X            return(-1);
  1085. X        }
  1086. X        ++op;
  1087. X        }
  1088. X        switch(*op) {
  1089. X        case 's':
  1090. X        if (ptr[1]) {
  1091. X            *(char **)*ap = ptr + 1;
  1092. X            ptr = "\0";
  1093. X        } else {
  1094. X            *(char **)*ap = av[++i];
  1095. X        }
  1096. X        break;
  1097. X        case 'd':
  1098. X        if (isshort)
  1099. X            *(short *)*ap = atoi(++ptr);
  1100. X        else
  1101. X            *(long *)*ap = atoi(++ptr);
  1102. X        while (*ptr >= '0' && *ptr <= '9')
  1103. X            ++ptr;
  1104. X        break;
  1105. X        default:
  1106. X        return(-1);
  1107. X        }
  1108. X    }
  1109. X    }
  1110. X    return(j);
  1111. X}
  1112. X
  1113. Xelog(how, ctl, arg)
  1114. Xchar *ctl;
  1115. Xlong arg;
  1116. X{
  1117. X    char *dir = getenv("DNETDIR");
  1118. X    FILE *fi;
  1119. X    char buf[256];
  1120. X    long dtime;
  1121. X
  1122. X    time(&dtime);
  1123. X
  1124. X    if (!dir)
  1125. X    dir = "";
  1126. X    sprintf(buf, "%s%s", dir, "DNET.LOG");
  1127. X    if (fi = fopen(buf, "a")) {
  1128. X    strcpy(buf, ctime(&dtime));
  1129. X    buf[strlen(buf)-1] = 0;
  1130. X    fprintf(fi, "%s ", buf);
  1131. X    fprintf(fi, ctl, arg);
  1132. X    putc('\n', fi);
  1133. X    fclose(fi);
  1134. X    }
  1135. X    if (how == EFATAL)
  1136. X    exit(1);
  1137. X}
  1138. X
  1139. END_OF_FILE
  1140. if test 6103 -ne `wc -c <'unix/lib/dnetlib.c'`; then
  1141.     echo shar: \"'unix/lib/dnetlib.c'\" unpacked with wrong size!
  1142. fi
  1143. # end of 'unix/lib/dnetlib.c'
  1144. fi
  1145. if test -f 'unix/lib/dnetlib.h' -a "${1}" != "-c" ; then 
  1146.   echo shar: Will not clobber existing file \"'unix/lib/dnetlib.h'\"
  1147. else
  1148. echo shar: Extracting \"'unix/lib/dnetlib.h'\" \(52 characters\)
  1149. sed "s/^X//" >'unix/lib/dnetlib.h' <<'END_OF_FILE'
  1150. X
  1151. X#define EFATAL 0
  1152. X#define EWARN 1
  1153. X#define EDEBUG 2
  1154. X
  1155. END_OF_FILE
  1156. if test 52 -ne `wc -c <'unix/lib/dnetlib.h'`; then
  1157.     echo shar: \"'unix/lib/dnetlib.h'\" unpacked with wrong size!
  1158. fi
  1159. # end of 'unix/lib/dnetlib.h'
  1160. fi
  1161. if test ! -d 'unix/server' ; then
  1162.     echo shar: Creating directory \"'unix/server'\"
  1163.     mkdir 'unix/server'
  1164. fi
  1165. if test -f 'unix/server/Makefile' -a "${1}" != "-c" ; then 
  1166.   echo shar: Will not clobber existing file \"'unix/server/Makefile'\"
  1167. else
  1168. echo shar: Extracting \"'unix/server/Makefile'\" \(765 characters\)
  1169. sed "s/^X//" >'unix/server/Makefile' <<'END_OF_FILE'
  1170. X
  1171. X#    DNET SERVERS
  1172. X#
  1173. X#
  1174. X#    DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved
  1175. X
  1176. XNETLIB = ../lib/dnetlib.o
  1177. XBIN = ../bin
  1178. X
  1179. X
  1180. X#all:    $(NETLIB) $(BIN)/scopy $(BIN)/sshell \
  1181. X#    $(BIN)/sloadav $(BIN)/sgcopy $(BIN)/snfs \
  1182. X
  1183. Xall:    $(NETLIB) $(BIN)/smailchk 
  1184. X
  1185. X$(NETLIB) : ../lib/dnetlib.c
  1186. X    cc -c ../lib/dnetlib.c
  1187. X    mv dnetlib.o ../lib
  1188. X
  1189. X#$(BIN)/snfs:        snfs.o
  1190. X#    cc snfs.o $(NETLIB) -o $(BIN)/snfs
  1191. X
  1192. X#$(BIN)/scopy:        scopy.o
  1193. X#    cc scopy.o $(NETLIB) -o $(BIN)/scopy
  1194. X
  1195. X#$(BIN)/sgcopy:        sgcopy.o
  1196. X#    cc sgcopy.o $(NETLIB) -o $(BIN)/sgcopy
  1197. X
  1198. X#$(BIN)/sshell:        sshell.o
  1199. X#    cc sshell.o $(NETLIB) -o $(BIN)/sshell
  1200. X
  1201. X#$(BIN)/sloadav:        sloadav.o
  1202. X#    cc sloadav.o $(NETLIB) -o $(BIN)/sloadav
  1203. X
  1204. X$(BIN)/smailchk:       smailchk.o
  1205. X    cc smailchk.o $(NETLIB) -o $(BIN)/smailchk
  1206. X
  1207. Xclean:
  1208. X    rm -f *.o make.out
  1209. X
  1210. END_OF_FILE
  1211. if test 765 -ne `wc -c <'unix/server/Makefile'`; then
  1212.     echo shar: \"'unix/server/Makefile'\" unpacked with wrong size!
  1213. fi
  1214. # end of 'unix/server/Makefile'
  1215. fi
  1216. if test -f 'unix/server/servers.h' -a "${1}" != "-c" ; then 
  1217.   echo shar: Will not clobber existing file \"'unix/server/servers.h'\"
  1218. else
  1219. echo shar: Extracting \"'unix/server/servers.h'\" \(450 characters\)
  1220. sed "s/^X//" >'unix/server/servers.h' <<'END_OF_FILE'
  1221. X
  1222. X/*
  1223. X *  SERVERS.H
  1224. X *
  1225. X *    DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved
  1226. X */
  1227. X
  1228. X#define PORT_FILECOPY    8192
  1229. X#define PORT_ALPHATERM    8193
  1230. X#define PORT_ECHO    8194
  1231. X#define PORT_IALPHATERM 8195
  1232. X#define PORT_AMIGATERM    8195
  1233. X#define PORT_AMIGASHELL 8196
  1234. X#define PORT_LOADAV    8197
  1235. X#define PORT_PRINTER    8198
  1236. X#define PORT_PASSWD    8199
  1237. X#define PORT_BBS    8200
  1238. X#define PORT_GFILECOPY    8201
  1239. X#define PORT_NFS    8202
  1240. X#define PORT_ND        8203
  1241. X#define PORT_MAILCHK    8204
  1242. X
  1243. END_OF_FILE
  1244. if test 450 -ne `wc -c <'unix/server/servers.h'`; then
  1245.     echo shar: \"'unix/server/servers.h'\" unpacked with wrong size!
  1246. fi
  1247. # end of 'unix/server/servers.h'
  1248. fi
  1249. if test -f 'unix/server/smailchk.c' -a "${1}" != "-c" ; then 
  1250.   echo shar: Will not clobber existing file \"'unix/server/smailchk.c'\"
  1251. else
  1252. echo shar: Extracting \"'unix/server/smailchk.c'\" \(10797 characters\)
  1253. sed "s/^X//" >'unix/server/smailchk.c' <<'END_OF_FILE'
  1254. X
  1255. X/*
  1256. X *    SMAILCHK.C
  1257. X *
  1258. X *    DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved
  1259. X *
  1260. X *    Check the mailbox and reports if new mail
  1261. X *    has arrived.  Connects to the Mailchk client on the Amiga.
  1262. X *    Accepts only one connection.
  1263. X *
  1264. X *    Written by S. Laroche.
  1265. X */
  1266. X
  1267. X#include <stdio.h>
  1268. X#include <sys/time.h>
  1269. X#include <sys/file.h>
  1270. X#include <errno.h>
  1271. X#include <signal.h>
  1272. X#include <sys/types.h>
  1273. X#include <sys/stat.h>
  1274. X#include <strings.h>
  1275. X#include <sys/param.h>      /* for definition of MAXPATHLEN */
  1276. X
  1277. X#include "servers.h"
  1278. X
  1279. X#define BUFLENGTH        512L  /* Should be the same as the */
  1280. X#define MAILDIR   "/usr/spool/mail/"  /*  def. in mailchk.c on the Amiga */
  1281. X
  1282. Xextern int errno;
  1283. Xextern char *getenv();
  1284. X
  1285. Xvoid do_mailchk();
  1286. Xchar delmailmsg();
  1287. Xchar copyfiles();
  1288. Xchar sendmail();
  1289. X
  1290. Xlong numsecs;
  1291. Xchar firstrun;
  1292. Xint fd;
  1293. X
  1294. Xmain(ac,av)
  1295. Xchar *av[];
  1296. X{
  1297. X    long chann = DListen(PORT_MAILCHK);
  1298. X    char result;
  1299. X
  1300. X    if (av[1])
  1301. X    chdir(av[1]);
  1302. X    signal(SIGALRM, do_mailchk);
  1303. X    for (;;) {
  1304. X    fd = DAccept(chann);
  1305. X    if (fd < 0) {
  1306. X        if (errno == EINTR)
  1307. X        continue;
  1308. X        break;
  1309. X    }
  1310. X    getmailpath();
  1311. X    while (ggread(fd,&result,1) == 1) {
  1312. X          alarm(0); 
  1313. X      Whatdoyouwant(fd,result);
  1314. X          if (result > 1) do_mailchk(); 
  1315. X          else alarm(numsecs);
  1316. X    }
  1317. X    close(fd);
  1318. X    _exit(1);
  1319. X    }
  1320. X    perror("SMAILCHK");
  1321. X}
  1322. X
  1323. Xchar buf[BUFLENGTH], mname[MAXPATHLEN];
  1324. X
  1325. Xgetmailpath()
  1326. X
  1327. X{
  1328. X    char *buffer;
  1329. X
  1330. X    if ((buffer = getenv("MAIL")) == NULL) {
  1331. X       strcpy(mname,MAILDIR);
  1332. X    }
  1333. X    else {
  1334. X       strcpy(mname,buffer);
  1335. X       strcat(mname,"/");
  1336. X    }
  1337. X    strncat(mname, getenv("USER"), MAXPATHLEN - strlen(mname));
  1338. X}
  1339. X
  1340. XWhatdoyouwant(fd,result)
  1341. X
  1342. Xint fd;
  1343. Xchar result;
  1344. X
  1345. X/*  This function interprets requests from the Amiga client.
  1346. X    0 -> Do nothing
  1347. X    1 -> Send the headers of each letter.
  1348. X    2 -> Send a particular message.
  1349. X    3 -> Delete a particular message.
  1350. X    4 -> Initial handshake.
  1351. X    5 -> Send mail using "mail".
  1352. X*/
  1353. X
  1354. X{
  1355. X    char *buffer;
  1356. X    unsigned char dummy;
  1357. X    int temp;
  1358. X    FILE *fi;
  1359. X
  1360. X    switch(result) {
  1361. X    case 1 :
  1362. X      if (fi = fopen(mname, "r")) {
  1363. X          do {
  1364. X        temp = produceheader(fi,buf);
  1365. X        if (temp < 0) dummy = strlen(buf);
  1366. X        else if (temp == 0) break;
  1367. X             else dummy = temp;
  1368. X        gwrite(fd,&dummy,1);
  1369. X        gwrite(fd,buf,dummy);
  1370. X          } while (temp > 0);
  1371. X      }
  1372. X      else {
  1373. X        perror("SMAILCHK, error opening mailbox");
  1374. X        exit(0);
  1375. X      }
  1376. X      fclose(fi);
  1377. X      dummy = 0;
  1378. X      gwrite(fd,&dummy,1);
  1379. X      break;
  1380. X    case 2 :
  1381. X      buffer = (char *) malloc(BUFLENGTH);
  1382. X      if (buffer == NULL) {
  1383. X          fprintf(stderr,"SMAILCHK:  error allocating memory\n");
  1384. X      }
  1385. X      else {
  1386. X          sendmailmsg(fd,mname,buffer);
  1387. X          free(buffer);
  1388. X      }
  1389. X      break;
  1390. X    case 3 :
  1391. X      { char ok;
  1392. X
  1393. X      ok = delmailmsg(fd,mname);
  1394. X      gwrite(fd,&ok,1);
  1395. X      }
  1396. X      break;
  1397. X    case 4 :
  1398. X      if ((ggread(fd,&numsecs,4)  == 4) &&
  1399. X          (ggread(fd,&firstrun,1) == 1)) {
  1400. X               fprintf(stderr,"SMAILCHK, frequency = %ld seconds\n",numsecs);
  1401. X               break;
  1402. X          }
  1403. X      else { close(fd); _exit(1); }
  1404. X        case 5 :
  1405. X          { char ok = 0, *address;
  1406. X
  1407. X        buffer = (char *) malloc(BUFLENGTH);
  1408. X        address = (char *) malloc(BUFLENGTH);
  1409. X        if ((buffer == NULL) || (address == NULL)) {
  1410. X            fprintf(stderr,"SMAILCHK:  error allocating memory\n");
  1411. X        }
  1412. X            else {
  1413. X                if (ok = sendmail(fd,address,buffer)) {
  1414. X                    sprintf(buf,"mail %s < %s",address,buffer);
  1415. X                    ok = system(buf) >> 8;
  1416. X                    unlink(buffer);
  1417. X                    if (ok == 0) ok = 1;
  1418. X                    else ok = 0; 
  1419. X                }
  1420. X                free(buffer);
  1421. X                free(address);
  1422. X        }
  1423. X            gwrite(fd,&ok,1);
  1424. X            break;
  1425. X          }
  1426. X    }
  1427. X}
  1428. X
  1429. Xvoid do_mailchk()
  1430. X
  1431. X{
  1432. X    char dummy, *s_mtime;
  1433. X    struct stat tempbuf;
  1434. X    static char nomail = 1;
  1435. X    static long lasttime = 0;
  1436. X
  1437. X    alarm(numsecs);
  1438. X    strcpy(buf,"=");
  1439. X    if (stat(mname,&tempbuf) == -1 || tempbuf.st_size == 0) {
  1440. X    if (errno == ENOENT || tempbuf.st_size == 0) { 
  1441. X            if (nomail) {
  1442. X        strcpy(buf,"No mail.");
  1443. X        nomail = 0;
  1444. X            }
  1445. X    }
  1446. X    else perror("SMAILCHK, Unable to examine file");
  1447. X    }
  1448. X    else {
  1449. X        if (tempbuf.st_mtime > lasttime) {
  1450. X        if (tempbuf.st_mtime >= tempbuf.st_atime) {
  1451. X             s_mtime = ctime(&tempbuf.st_mtime);
  1452. X             strcpy(buf,"New mail arrived on ");
  1453. X             strcat(buf,s_mtime);
  1454. X             nomail = 1;
  1455. X        }
  1456. X        else if (firstrun > 0) strcpy(buf,"You have mail\n");
  1457. X            lasttime = tempbuf.st_mtime;
  1458. X        }
  1459. X    }
  1460. X    dummy = strlen(buf);
  1461. X    if (dummy > 2) {
  1462. X    gwrite(fd, &dummy, 1);
  1463. X    gwrite(fd, buf, dummy);
  1464. X    }
  1465. X    firstrun = 1;
  1466. X}
  1467. X
  1468. Xint produceheader(fi,buf)
  1469. X
  1470. X/* Produce a header of the form 'N sender, date, subject L/C S'
  1471. X * where N = number of the message
  1472. X *       L = number of lines in message
  1473. X *       C = number of characters in message
  1474. X *       S = number of characters in message without header
  1475. X * 
  1476. X * The function returns the # of chars in the header.  When the last
  1477. X * header is encountered, the fn returns -(# of chars).
  1478. X */
  1479. X
  1480. XFILE *fi;
  1481. Xchar *buf;
  1482. X
  1483. X{
  1484. X    static int mcnt = -1;
  1485. X    static char from = 1, subject = 1, Date = 1;
  1486. X    static unsigned long llines = 0, lch = 0, sch2, sch1;
  1487. X    unsigned long lines, ch;
  1488. X    char line[256], fl, *cp;
  1489. X    static char date[60], olddate[60], path[80], oldpath[80];
  1490. X    static char sub[80], oldsub[80];
  1491. X
  1492. X    lines = llines;
  1493. X    ch = lch;
  1494. X    while (cp = fgets(line, 256, fi)) {
  1495. X      lines++;
  1496. X      ch += strlen(line);
  1497. X      llines++;
  1498. X      lch += strlen(line);
  1499. X      cp[strlen(line)-1] = '\0';
  1500. X      if (!strncmp(line, "From ", 5)) {
  1501. X      mcnt++;
  1502. X      from = 0;
  1503. X      subject = 0;
  1504. X      Date = 0;
  1505. X      if (mcnt > 0) {
  1506. X          strcpy(olddate,date);
  1507. X          strcpy(oldpath,path);
  1508. X          strcpy(oldsub,sub);
  1509. X          strcpy(sub,"(no subject)");
  1510. X          strcpy(date,"(no date)"); 
  1511. X          sch2 = sch1;
  1512. X          llines = 1L;
  1513. X          lch = strlen(line) + 1;
  1514. X      }
  1515. X      } else
  1516. X      if (!from && ( !strncmp(line, "From: ", 6) ||
  1517. X           !strncmp(line+1, "From: ", 6) )) {
  1518. X          from = 1;
  1519. X          sch1 = ch;
  1520. X          cp = index(line,'<');
  1521. X          if (cp) *cp++;
  1522. X          else cp = index(line,' ')+1;
  1523. X          strcpy(path, cp);
  1524. X          cp = index(path,'>');
  1525. X          if (!cp) cp = index(path,' ');
  1526. X          if (cp) cp[0] = '\0';
  1527. X          if (mcnt > 0) {
  1528. X          fl = 1;
  1529. X          break;
  1530. X          }
  1531. X      } else
  1532. X          if (!subject && !strncmp(line, "Subject: ", 9)) {
  1533. X          subject = 1;
  1534. X          sch1 = ch;
  1535. X          strncpy(sub,index(line,' ')+1,80);
  1536. X          }
  1537. X          else
  1538. X        if (!Date && !strncmp(line,"Date: ",6)) {
  1539. X            Date = 1;
  1540. X            sch1 = ch;
  1541. X            cp = index(line,':') + 1;
  1542. X            while (*cp == ' ' || *cp == '\t') *cp++;
  1543. X            strncpy(date,cp,60);
  1544. X        }
  1545. X      fl = 0;
  1546. X    }
  1547. X    if (fl) {
  1548. X        sprintf(buf," %d %s",mcnt,oldpath);
  1549. X        cp = buf + strlen(buf);
  1550. X    sprintf(cp,"  %s, %s %ld/%ld %ld \0",olddate,oldsub,lines-llines,ch-lch,sch2);
  1551. X    }
  1552. X    else {
  1553. X        sprintf(buf," %d %s",mcnt+1,path);
  1554. X        cp = buf + strlen(buf);
  1555. X        sprintf(cp,"  %s, %s %ld/%ld %ld \0",date,sub,lines,ch,sch1);
  1556. X    }
  1557. X    if (strlen(buf) > 255) buf[254] = '\0';
  1558. X    if (fl) return(strlen(buf));
  1559. X    else {
  1560. X    mcnt = -1;
  1561. X        llines = lch = 0L;
  1562. X    return(-strlen(buf));
  1563. X    }
  1564. X}
  1565. X
  1566. Xsendmailmsg(fd,mname,buffer)
  1567. X
  1568. Xchar *buffer, *mname;
  1569. Xint fd;
  1570. X
  1571. X{
  1572. X  long len= BUFLENGTH;
  1573. X  unsigned long nochars, stchar;
  1574. X  char dummy;
  1575. X  FILE *fi;
  1576. X
  1577. X  if (ggread(fd,&stchar,4) == 4) {
  1578. X      if (ggread(fd,&nochars,4) == 4) {
  1579. X      if (fi = fopen(mname,"r")) {
  1580. X          if (fseek(fi,stchar,0) < 0) {
  1581. X          fclose(fi);
  1582. X          exit;
  1583. X          }
  1584. X          else {
  1585. X          dummy = 0;
  1586. X          while (nochars > len) {
  1587. X             fread(buffer,1,len,fi);
  1588. X             nochars -= len;
  1589. X             gwrite(fd,&len,4);
  1590. X             gwrite(fd,buffer,len);
  1591. X             ggread(fd,&dummy,1);
  1592. X             if (dummy) break;
  1593. X            }
  1594. X          if (dummy == 0) {
  1595. X              if (fread(buffer,1,nochars,fi) != nochars) {
  1596. X              perror("SMAILCHK, unable to read mail file");
  1597. X              exit;
  1598. X              }
  1599. X              gwrite(fd,&nochars,4);
  1600. X              gwrite(fd,buffer,nochars);
  1601. X              ggread(fd,&dummy,1);
  1602. X              nochars = 0L;
  1603. X              gwrite(fd,&nochars,4);
  1604. X          }
  1605. X          }
  1606. X          fclose(fi);
  1607. X       }
  1608. X       }
  1609. X   }
  1610. X}
  1611. X
  1612. Xchar sendmail(fd,address,fname)
  1613. X
  1614. Xint fd;
  1615. Xchar *address, *fname;
  1616. X
  1617. X{
  1618. X  FILE *fi;
  1619. X  char ok = 0, *tname;
  1620. X
  1621. X  if (!(tname = getenv("DNETDIR"))) return(ok);
  1622. X  sprintf(fname,"%smailchk%ld",tname,getpid());
  1623. X  {  short len;
  1624. X     if (ggread(fd,&len,2) != 2) return(ok);
  1625. X     if (ggread(fd,address,len) != len) return(ok);
  1626. X  }
  1627. X  {  long len;
  1628. X     if (ggread(fd,&len,4) != 4) return(ok);
  1629. X     if ((fi = fopen(fname, "w")) == NULL) return(ok);
  1630. X     while (len > BUFLENGTH) {
  1631. X         int count = BUFLENGTH;
  1632. X         if (ggread(fd,buf,count) != count) goto fin;
  1633. X         if (fwrite(buf,1,count,fi) != count) {
  1634. X             perror("SMAILCHK, error while writing");
  1635. X             goto fin;
  1636. X         }
  1637. X         len -= count;
  1638. X     }
  1639. X     if (len > 0) {
  1640. X         if (ggread(fd,buf,len) != len) goto fin;
  1641. X         if (fwrite(buf,1,len,fi) != len) {
  1642. X             perror("SMAILCHK, error while writing");
  1643. X             goto fin; 
  1644. X         }
  1645. X     }
  1646. X     ok = 1;
  1647. Xfin: fclose(fi);
  1648. X     if (!ok) unlink(fname);
  1649. X     return(ok);
  1650. X  }
  1651. X}
  1652. X
  1653. Xchar delmailmsg(fd,mname)
  1654. X
  1655. Xchar *mname;
  1656. Xint fd;
  1657. X
  1658. X{
  1659. X  long nochars, stchar;
  1660. X  FILE *f1, *f2;
  1661. X  char ok = 0, *tname;
  1662. X
  1663. X
  1664. X  if (!(tname = getenv("DNETDIR"))) return(ok);
  1665. X  strcpy(buf,tname);
  1666. X  strcat(buf,"MAIL0001");
  1667. X  if (ggread(fd,&stchar,4) == 4)
  1668. X      if (ggread(fd,&nochars,4) == 4)
  1669. X      if ((f1 = fopen(mname,"r")) && (f2 = fopen(buf,"w+"))) {
  1670. X          if (copyfiles(f1,f2,stchar))
  1671. X          if (fseek(f1,nochars,1) == 0)
  1672. X              if (ok = copyfiles(f1,f2,-1)) {
  1673. X              fclose(f1);
  1674. X              if (unlink(mname) < 0) {
  1675. X                  perror("SMAILCHK, Error while removing");
  1676. X                  fclose(f2);
  1677. X                  unlink(buf);
  1678. X                  return(0);
  1679. X              }
  1680. X              rewind(f2);
  1681. X              if (f1 = fopen(mname,"w")) {
  1682. X                  fchmod(f1,0600);
  1683. X                  ok = copyfiles(f2,f1,-1);
  1684. X                  fclose(f1);
  1685. X                  fclose(f2);
  1686. X                  unlink(buf);
  1687. X              }
  1688. X              else {
  1689. X                  perror("SMAILCHK, Error writing in spool dir");
  1690. X                  fclose(f2);
  1691. X                  return(0);
  1692. X              }
  1693. X              if (f1 = fopen(mname,"r")) { /* Touch the file */
  1694. X                  char f = 0;
  1695. X                  fread(f,1,1,f1);
  1696. X                  fseek(f1,0,2);
  1697. X                  if (ftell(f1) < 2) f = 1;
  1698. X                  fclose(f1);
  1699. X                  if (f) unlink(mname);
  1700. X              }
  1701. X              return(ok);
  1702. X              }
  1703. X          perror("SMAILCHK, Error while writing");
  1704. X          fclose(f1);
  1705. X          fclose(f2);
  1706. X          return(0);
  1707. X      }
  1708. X  perror("SMAILCHK, Delete operation");
  1709. X  return(0);
  1710. X}
  1711. X
  1712. Xchar copyfiles(f1,f2,n)
  1713. X
  1714. XFILE *f1, *f2;
  1715. Xlong n;
  1716. X
  1717. X{
  1718. X  char buffer[1024], ok = 1;
  1719. X  int tmp;
  1720. X
  1721. X  while (n > 1024 || n < 0) {
  1722. X    if (n > 0) n -= 1024;
  1723. X    if ((tmp = fread(buffer,1,1024,f1)) == 1024)
  1724. X    if (fwrite(buffer,1,1024,f2) == 1024)
  1725. X        continue;
  1726. X    ok = 0;
  1727. X    break;
  1728. X  }
  1729. X  while (ok && n > 0) {
  1730. X      if (fread(buffer,1,n,f1) == n)
  1731. X      if (fwrite(buffer,1,n,f2) == n)
  1732. X          break;
  1733. X      ok = 0;
  1734. X  }
  1735. X  if (n >= 0) return(ok);
  1736. X  if (fwrite(buffer,1,tmp,f2) == tmp) ok = 1;
  1737. X  return(ok);
  1738. X}
  1739. END_OF_FILE
  1740. if test 10797 -ne `wc -c <'unix/server/smailchk.c'`; then
  1741.     echo shar: \"'unix/server/smailchk.c'\" unpacked with wrong size!
  1742. fi
  1743. # end of 'unix/server/smailchk.c'
  1744. fi
  1745. echo shar: End of archive 1 \(of 3\).
  1746. cp /dev/null ark1isdone
  1747. MISSING=""
  1748. for I in 1 2 3 ; do
  1749.     if test ! -f ark${I}isdone ; then
  1750.     MISSING="${MISSING} ${I}"
  1751.     fi
  1752. done
  1753. if test "${MISSING}" = "" ; then
  1754.     echo You have unpacked all 3 archives.
  1755.     rm -f ark[1-9]isdone
  1756. else
  1757.     echo You still need to unpack the following archives:
  1758.     echo "        " ${MISSING}
  1759. fi
  1760. ##  End of shell archive.
  1761. exit 0
  1762. -- 
  1763. Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
  1764. Mail comments to the moderator at <amiga-request@cs.odu.edu>.
  1765. Post requests for sources, and general discussion to comp.sys.amiga.
  1766.